﻿
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Xml.Linq;
using System.Data.SqlClient; // Classe que permite acesso ao SQL Server (Obrigatorio)

namespace li4_staffsched.Camada_de_Dados
{
    class Conexao
    {

        #region Declaracao de Variaveis globais
            private bool _State;                // Indica ULTIMO Status da conexão
            private string _ErrorMessage;       // Indica ULTIMO Mensagem de Erro da conexao
            private int _ErrorNumber;           // Indica ULTIMO Numero de Erro da conexao
            private bool _CompleteCommand;      // Indica ULTIMO comando foi executado com sucesso
            private SqlDataReader _rsData;      // Usado para retornar colecao de registros
        #endregion

        #region Definicao de Metodos

        public void ExecutaQuery(string myConnectionName, string myQueryString){
            // Metodo responsavel por executar uma instrução SQL
            // Recebe como parametro o nome de uma chave do arquivo web.config que contem string de conexão e
            // a instrução SQL a ser executada pode ser um SELECT por exemplo
            // Utililizo Tray..Catch para tratamento de erro
            try
            {
                // Definir valores padrões das variaveis
                _ErrorMessage   = "";
                _State          = false;

                // Se nao for passado nenhuma chave de conexão do arquivo web.config
                // vamos usar uma chave padrao de conexão do arquivo Web.Config
                if (myConnectionName.Length == 0)
                {
                    myConnectionName = "Data Source=RICARDO-PC\\SQLLI4,1433;Initial Catalog=db_staffsched;User ID=li4staff;Password=li4g2;Trusted_Connection=True;"; 
                }

                string myConnectionString = myConnectionName;

                // Se não for informado comando T-SQL retornamos error
                if (myQueryString.Length > 0) // Se realmente foi passado um comando a ser executado
                {   
                    // Iniciar uma conexão com o base de dados
                    SqlConnection myConnection = new SqlConnection(myConnectionString);
                    // Abrir a conexão
                    myConnection.Open(); 

                    // Iniciar um comando
                    SqlCommand myCommand = new SqlCommand(myQueryString, myConnection);

                    // Executar um comando com ExecuteReader, pois este retorna dados a um SqlDataReader
                    _rsData = myCommand.ExecuteReader(); 
                    _State  = true;                      
                    _CompleteCommand = true;
                    myConnection.Close();
                }
            }
            catch (Exception ex)
            {
                // Em caso de erro preencher as variaveis abaixo
                _ErrorMessage = ex.Message.ToString();
                _State = false;
                _ErrorNumber = ex.GetHashCode();
                
            }
        }
        public SqlDataReader RecordSet{
            // Metodo para ler os registros
            get { return _rsData; }
        }
        
        public int ErrorNumber{
            // Metodo para ler ultimo código de error
            get { return _ErrorNumber; }
        }
        
        public string ErrorDescription{
            // Metodo para ler ultima descrição de error
            get { return _ErrorMessage; }
        }
            
        public bool ConnectionState{
            // Metodo para ler ultimo status da conexao
            get { return _State; }
        }
            
        public bool CompleteCommand{
            // Metodo para ler status do ultimo comando executado.
            get { return _CompleteCommand; }
        }
        #endregion
    }


}

